From 6341c2f9a202774b01118487c8ef735bfb34c132 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Fri, 7 Sep 2001 23:11:17 +0000 Subject: [PATCH] Make the default default colormap the GdkRGB colormap, not the system Fri Sep 7 18:50:59 2001 Owen Taylor * gtk/gtkwidget.c (gtk_widget_get_default_colormap): Make the default default colormap the GdkRGB colormap, not the system colormap. * gtk/gtkinvisible.c (gtk_invisible_init) gtk/gtkwindow.c (gtk_window_init): Set the current colormap, as returned by _gtk_widget_peek_colormap() on the widget. * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap to GTK+. Make it return %NULL instead of the default colormap if no colormap has explicitely been pushed. * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for colormaps on ancestral widgets before defaulting the the system default colormap. * docs/Changes-2.0.txt: explain colormap changes. --- ChangeLog | 21 +++++++++++++++++++ ChangeLog.pre-2-0 | 21 +++++++++++++++++++ ChangeLog.pre-2-10 | 21 +++++++++++++++++++ ChangeLog.pre-2-2 | 21 +++++++++++++++++++ ChangeLog.pre-2-4 | 21 +++++++++++++++++++ ChangeLog.pre-2-6 | 21 +++++++++++++++++++ ChangeLog.pre-2-8 | 21 +++++++++++++++++++ docs/Changes-2.0.txt | 16 ++++++++++++++- gtk/gtkinvisible.c | 6 ++++++ gtk/gtkwidget.c | 49 ++++++++++++++++++-------------------------- gtk/gtkwidget.h | 2 ++ gtk/gtkwindow.c | 6 ++++++ 12 files changed, 196 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index d3e1d19310..d1d8d35a1d 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,24 @@ +Fri Sep 7 18:50:59 2001 Owen Taylor + + * gtk/gtkwidget.c (gtk_widget_get_default_colormap): + Make the default default colormap the GdkRGB colormap, + not the system colormap. + + * gtk/gtkinvisible.c (gtk_invisible_init) + gtk/gtkwindow.c (gtk_window_init): Set the current + colormap, as returned by _gtk_widget_peek_colormap() + on the widget. + + * gtk/gtkwidget.[ch]: Export _gtk_widget_peek_colormap + to GTK+. Make it return %NULL instead of the default + colormap if no colormap has explicitely been pushed. + + * gtk/gtkwidget.c (gtk_widget_get_colormap): Check for + colormaps on ancestral widgets before defaulting the + the system default colormap. + + * docs/Changes-2.0.txt: explain colormap changes. + 2001-09-07 Havoc Pennington * gtk/gtktextiter.c: add some lame code to handle G_MININT, fixes diff --git a/docs/Changes-2.0.txt b/docs/Changes-2.0.txt index e4260eabf0..a44f5aedab 100644 --- a/docs/Changes-2.0.txt +++ b/docs/Changes-2.0.txt @@ -477,7 +477,21 @@ Incompatible Changes from GTK+-1.2 to GTK+-2.0: gdk_wm_take_focus gdk_atom_intern ("WM_TAKE_FOCUS", FALSE) gdk_wm_protocols gdk_atom_intern ("WM_PROTOCOLS", FALSE) - +* The handling of Colormaps and widgets has been changed: + + - The default colormap for widgets is now the GdkRGB colormap, not + the system default colormap. If you try to use resources created for + a widget (e.g., widget->style) with a window using the system + colormap, errors will result on some machines. + + - gtk_widget_push/pop_colormap() only cause the colormap to be + explicitely set on toplevel widgets not on all widgets. The + colormap for other widgets (when not set using + gtk_widget_set_colormap()), is determined by finding the nearest + ancestor with a colormap set on it explicitely, or if that + fails, the default colormap. + + \ No newline at end of file diff --git a/gtk/gtkinvisible.c b/gtk/gtkinvisible.c index fc19d33066..529b3b3688 100644 --- a/gtk/gtkinvisible.c +++ b/gtk/gtkinvisible.c @@ -83,6 +83,8 @@ gtk_invisible_class_init (GtkInvisibleClass *class) static void gtk_invisible_init (GtkInvisible *invisible) { + GdkColormap *colormap; + GTK_WIDGET_UNSET_FLAGS (invisible, GTK_NO_WINDOW); GTK_WIDGET_SET_FLAGS (invisible, GTK_TOPLEVEL); @@ -90,6 +92,10 @@ gtk_invisible_init (GtkInvisible *invisible) gtk_object_sink (GTK_OBJECT (invisible)); invisible->has_user_ref_count = TRUE; + + colormap = _gtk_widget_peek_colormap (); + if (colormap) + gtk_widget_set_colormap (GTK_WIDGET (invisible), colormap); } static void diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index f5bcfcad98..2d731a7ccf 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -194,7 +194,6 @@ static gboolean gtk_widget_real_focus_out_event (GtkWidget *widget, GdkEventFocus *event); static gboolean gtk_widget_real_focus (GtkWidget *widget, GtkDirectionType direction); -static GdkColormap* gtk_widget_peek_colormap (void); static PangoContext* gtk_widget_peek_pango_context (GtkWidget *widget); static void gtk_widget_reparent_container_child (GtkWidget *widget, gpointer client_data); @@ -1253,11 +1252,6 @@ gtk_widget_init (GtkWidget *widget) widget->style = gtk_widget_get_default_style (); gtk_style_ref (widget->style); - - colormap = gtk_widget_peek_colormap (); - - if (colormap != gtk_widget_get_default_colormap ()) - gtk_widget_set_colormap (widget, colormap); } @@ -4695,10 +4689,15 @@ gtk_widget_get_colormap (GtkWidget *widget) if (colormap) return colormap; } - - colormap = gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_colormap); - if (colormap) - return colormap; + + while (widget) + { + colormap = gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_colormap); + if (colormap) + return colormap; + + widget = widget->parent; + } return gtk_widget_get_default_colormap (); } @@ -4944,14 +4943,8 @@ gtk_widget_push_colormap (GdkColormap *cmap) void gtk_widget_pop_colormap (void) { - GSList *tmp; - if (colormap_stack) - { - tmp = colormap_stack; - colormap_stack = colormap_stack->next; - g_slist_free_1 (tmp); - } + colormap_stack = g_slist_delete_link (colormap_stack, colormap_stack); } /** @@ -4987,7 +4980,7 @@ GdkColormap* gtk_widget_get_default_colormap (void) { if (!default_colormap) - gtk_widget_set_default_colormap (gdk_colormap_get_system ()); + gtk_widget_set_default_colormap (gdk_rgb_get_colormap ()); return default_colormap; } @@ -5346,20 +5339,18 @@ gtk_widget_real_size_request (GtkWidget *widget, requisition->height = widget->requisition.height; } -/***************************************** - * gtk_widget_peek_colormap: - * - * arguments: - * - * results: - *****************************************/ - -static GdkColormap* -gtk_widget_peek_colormap (void) +/** + * _gtk_widget_peek_colormap: + * + * Returns colormap currently pushed by gtk_widget_push_colormap, if any. + * + * Return value: the currently pushed colormap, or %NULL if there is none. + **/ +GdkColormap* +_gtk_widget_peek_colormap (void) { if (colormap_stack) return (GdkColormap*) colormap_stack->data; - return gtk_widget_get_default_colormap (); } static void diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h index edcd1d89f4..068cac33fb 100644 --- a/gtk/gtkwidget.h +++ b/gtk/gtkwidget.h @@ -757,6 +757,8 @@ GtkWidgetAuxInfo *_gtk_widget_get_aux_info (GtkWidget *widget, void _gtk_widget_propagate_hierarchy_changed (GtkWidget *widget, GtkWidget *previous_toplevel); +GdkColormap* _gtk_widget_peek_colormap (void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index e0d8ab6bd7..86ba6c46a9 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -576,6 +576,8 @@ gtk_window_class_init (GtkWindowClass *klass) static void gtk_window_init (GtkWindow *window) { + GdkColormap *colormap; + GTK_WIDGET_UNSET_FLAGS (window, GTK_NO_WINDOW); GTK_WIDGET_SET_FLAGS (window, GTK_TOPLEVEL); @@ -610,6 +612,10 @@ gtk_window_init (GtkWindow *window) window->decorated = TRUE; window->mnemonic_modifier = GDK_MOD1_MASK; + colormap = _gtk_widget_peek_colormap (); + if (colormap) + gtk_widget_set_colormap (GTK_WIDGET (window), colormap); + gtk_widget_ref (GTK_WIDGET (window)); gtk_object_sink (GTK_OBJECT (window)); window->has_user_ref_count = TRUE; -- 2.30.2